package cn.tedu._04mybatis.mapper;

import cn.tedu._04mybatis.pojo.entity.Weibo;
import cn.tedu._04mybatis.pojo.vo.*;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiboMapper {
    /**
     * 1.微博表中插入1条表记录
     * @param weibo 微博实体类对象
     * @return 受影响的数据条数
     */
    //@Insert("INSERT INTO weibo(content,created,user_id) VALUES (#{content},#{created},#{userId})")
    int insertWeibo(Weibo weibo);

    /**
     * 2.根据微博ID删除指定的微博
     */
    //@Delete("DELETE FROM weibo WHERE id=#{wid}")
    int deleteWeiboById(Long wid);

    /**
     * 3.根据微博ID更新指定微博的信息
     *   id  content  created  user_id
     */
    //@Update("UPDATE weibo SET content=#{content}, created=#{created}, user_id=#{userId} WHERE id=#{id}")
    int updateWeiboById(Weibo weibo);

    /**
     * 4.查询：单条数据全字段查询
     *   根据微博ID查询该条微博的所有信息
     *   SELECT id,content,created,user_id FROM weibo WHERE id=200;
     *   SELECT * FROM weibo WHERE id>200;
     *   SELECT content,created FROM weibo WHERE id=200;
     *   SELECT content,created FROM weibo WHERE id>200;
     */
    //注意：如果查询字段名和属性名不一致，则通过别名的方式解决.
    //@Select("SELECT id,content,created,user_id userId FROM weibo WHERE id=#{wid}")
    Weibo selectWeiboById(Long wid);

    /**
     * 5.查询：单条数据部分字段查询
     *   查询指定微博的内容content和发布时间created;
     */
    //@Select("SELECT content, created FROM weibo WHERE id=#{wid}")
    WeiboVO1 selectWeiboVOById(Long wid);

    /**
     * 6.查询：多条数据部分字段查询
     *   查询指定用户发布的微博的ID和内容
     *   6.1 创建VO类;
     *   6.2 定义接口方法和SQL;
     *   6.3 测试.
     */
    //@Select("SELECT id wid, content FROM weibo WHERE user_id=#{userId}")
    List<WeiboVO2> selectWeiboVO2ByUserId(Long userId);

    /**
     * 7.动态删除1:数组方式
     *   根据微博ID,删除指定的微博数据;
     *   DELETE FROM weibo WHERE id IN (1,3,5);
     *   操作步骤:
     *     1.定义接口方法;
     *     2.XML文件配置SQL;
     *     3.测试方法;
     */
    int deleteWeiboByIds1(Integer[] ids);

    /**
     * 8.动态删除2:集合方式
     */
    int deleteWeiboByIds2(List<Integer> ids);


    /**
     * 9.动态修该
     */
    int dynamicUpdateWeiboById(Weibo weibo);


    /**
     * 10.统计微博表中的表记录的数量
     */
    int selectCount();


//    11.ResultMap单表:根据微博ID查询该条微博的ID、内容content、用户ID
    ResultMapVO1 selectMap1(long wid);


    //    12.ResultMap多表:查询指定用户发的所有微博信息
    ResultMaoVO2 selectMap2(Long uid);


//    查询指定微博的所有评论信息：微博ID、微博内容、List<Comment>；
     WeinoCommentVO1 selectComment(Long wid);

}








